#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
邮件调试脚本
详细测试邮件发送功能
"""

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime
from email_config import SENDER_EMAIL, SENDER_PASSWORD, RECIPIENT_EMAIL


def test_smtp_connection():
    """测试SMTP连接"""
    print("🔍 测试SMTP连接...")
    
    try:
        # 测试QQ邮箱SMTP连接
        print(f"正在连接QQ邮箱SMTP服务器...")
        print(f"服务器: smtp.qq.com:587")
        print(f"邮箱: {SENDER_EMAIL}")
        
        server = smtplib.SMTP('smtp.qq.com', 587)
        print("✅ SMTP连接成功")
        
        # 启用TLS
        print("启用TLS加密...")
        server.starttls()
        print("✅ TLS启用成功")
        
        # 登录
        print("正在登录...")
        server.login(SENDER_EMAIL, SENDER_PASSWORD)
        print("✅ 登录成功")
        
        # 关闭连接
        server.quit()
        print("✅ SMTP测试完成")
        
        return True
        
    except smtplib.SMTPAuthenticationError as e:
        print(f"❌ 认证失败: {e}")
        print("可能原因:")
        print("1. 邮箱地址或授权码错误")
        print("2. 未开启IMAP/SMTP服务")
        print("3. 授权码已过期")
        return False
        
    except smtplib.SMTPConnectError as e:
        print(f"❌ 连接失败: {e}")
        print("可能原因:")
        print("1. 网络连接问题")
        print("2. 防火墙阻止")
        print("3. SMTP服务器不可访问")
        return False
        
    except Exception as e:
        print(f"❌ 其他错误: {e}")
        return False


def test_simple_email():
    """测试简单邮件发送"""
    print("\n📧 测试简单邮件发送...")
    
    try:
        # 创建简单邮件
        msg = MIMEMultipart()
        msg['From'] = SENDER_EMAIL
        msg['To'] = RECIPIENT_EMAIL
        msg['Subject'] = f"测试邮件 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
        
        body = """
这是一封测试邮件。

如果您收到这封邮件，说明邮件发送功能正常工作。

测试时间: """ + datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        
        msg.attach(MIMEText(body, 'plain', 'utf-8'))
        
        # 发送邮件
        print("正在发送测试邮件...")
        server = smtplib.SMTP('smtp.qq.com', 587)
        server.starttls()
        server.login(SENDER_EMAIL, SENDER_PASSWORD)
        
        text = msg.as_string()
        server.sendmail(SENDER_EMAIL, RECIPIENT_EMAIL, text)
        server.quit()
        
        print("✅ 测试邮件发送成功！")
        print(f"请检查 {RECIPIENT_EMAIL} 邮箱")
        return True
        
    except Exception as e:
        print(f"❌ 邮件发送失败: {e}")
        return False


def check_email_config():
    """检查邮箱配置"""
    print("🔧 检查邮箱配置...")
    print(f"发送邮箱: {SENDER_EMAIL}")
    print(f"接收邮箱: {RECIPIENT_EMAIL}")
    print(f"授权码长度: {len(SENDER_PASSWORD)} 字符")
    print(f"授权码前4位: {SENDER_PASSWORD[:4]}****")
    
    # 检查邮箱格式
    if '@qq.com' not in SENDER_EMAIL:
        print("⚠️  警告: 发送邮箱不是QQ邮箱")
    
    if len(SENDER_PASSWORD) < 10:
        print("⚠️  警告: 授权码长度可能不正确")
    
    print("✅ 配置检查完成")


def main():
    """主函数"""
    print("=" * 60)
    print("🔍 邮件发送调试工具")
    print("=" * 60)
    print(f"调试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("=" * 60)
    
    # 检查配置
    check_email_config()
    
    # 测试SMTP连接
    if test_smtp_connection():
        # 如果SMTP连接成功，测试邮件发送
        test_simple_email()
    else:
        print("\n💡 解决建议:")
        print("1. 检查QQ邮箱是否开启了IMAP/SMTP服务")
        print("2. 确认授权码是否正确（不是QQ密码）")
        print("3. 尝试重新获取授权码")
        print("4. 检查网络连接是否正常")


if __name__ == "__main__":
    main()
